El bot que estoy tratando de construir tiene una estructura de pregunta como tal:
¿Te gustaría aprender sobre las noticias, o el clima?
-El clima
¿Para qué ciudad le gustaría comprobar?
-Nueva York
El objetivo es para la palabra clave especificada Nueva York, el bot responde con la URL específica del clima. Si respondes "noticias" y luego "nueva york", respondería la url que es sobre noticias en nueva york. Hay muchas opciones alternativas en el bot, por lo que es difícil encontrar una solución para separar las palabras clave con el mismo nombre.
Te tengo un ejemplo simple con el que puedes trabajar.
Primero definimos algún tipo de estructura para contener cada árbol de respuestas y sus hojas. Este es un formato significativo del contexto que puede usar:
{ q: "question", a: { "answer1": { q: "question2", a: { "answer1": { ... }, "answer2": { ... } } }, "answer2": { q: "question2", a: ... } } }Aquí tiene un código para hacer que la lógica principal de la lógica del bot simple sea aún más clara:
const ctx = {q:"Would you like to know about weather or news?",a:{weather:{q:"For which city do you want ot know the current weather? (london or berlin)",a:{london:{q:"Blablbla weather... London!"},berlin:{q:"Blablabla weather... Berlin!"}}},news:{q:"For which city do you want ot know the current news? (london or berlin)",a:{london:{q:"Blablbla news... London!"},berlin:{q:"Blablabla news... Berlin!"}}}}}; // create button with text and callback arguments const createButton = (txt, cb) => { const b = document.createElement("button"); b.innerText = txt; b.onclick = () => { [...document.body.querySelectorAll("button")].forEach(e => e.remove()); cb(txt.toLowerCase()) } document.body.appendChild(b); } // your main loop const bot = (ctx) => { alert(ctx.q); // display / alert question const cb = (a) => (ctx = ctx.a[a], bot(ctx)); // callback goes to next inner context ctx.a && Object.keys(ctx.a).forEach(e => createButton(e, cb)); // create buttons } // startup call bot(ctx);